package com.atguigu.qz.service

import com.atguigu.qz.dao.DwdQzDao
import org.apache.spark.sql.SparkSession

/**
 * description ：做题模块 dws 层数据查询
 * author      ：剧情再美终是戏 
 * mail        : 13286520398@163.com
 * date        ：Created in 2020/3/8 14:41
 * modified By ：
 * version:    : 1.0
 */
object DwsQzService {
  /**
   * 使用 api 方式查询做题模块指标
   *
   * @Author 剧情再美终是戏
   * @Date 2020/3/8 14:44
   * @param spark sparkSession
   * @param dt    日期分区
   * @param dn    地区分区字段
   * @return java.lang.Object
   * @Version 1.0
   **/
  def queryDetailByApi(spark: SparkSession, dt: String, dn: String) = {
    // TODO
    // 基于宽表统计各试卷平均耗时、平均分
    // 将结果写入 ads.ads_paper_avgtimeandscore

    // 统计各试卷最高分、最低分
    // 将结果写入 ads.ads_paper_maxdetail

    // 按试卷分组统计每份试卷的前三用户详情
    // 将结果写入 ads.ads_top3_userdetail

    // 按试卷分组统计每份试卷的倒数前三的用户详情
    // 将结果写入 ads.ads_low3_userdetail

    // 统计各试卷各分段的用户id
    // 将结果写入 ads.ads_paper_scoresegment_user

    // 统计试卷未及格的人数，及格的人数，试卷的及格率 及格分数60
    // 将结果写入 ads_user_paper_detail

    // 统计各题的错误数，正确数，错题率
    // 将结果写入 ads.ads_user_question_detail
  }


  /**
   * 使用 sql 查询做题模块指标
   *
   * @Author 剧情再美终是戏
   * @Date 2020/3/8 14:44
   * @param spark sparkSession
   * @param dt    日期分区
   * @param dn    地区分区字段
   * @return java.lang.Object
   * @Version 1.0
   **/
  def queryDetailBysql(spark: SparkSession, dt: String, dn: String) = {
    // 基于宽表统计各试卷平均耗时、平均分
    // 将结果写入 ads.ads_paper_avgtimeandscore
    DwdQzDao.queryPaperAvgtimeAndScore(spark, dt, dn)

    // 统计各试卷最高分、最低分
    // 将结果写入 ads.ads_paper_maxdetail
    DwdQzDao.queryPaperMaxMinDetail(spark, dt, dn)

    // 按试卷分组统计每份试卷的前三用户详情
    // 将结果写入 ads.ads_top3_userdetail
    DwdQzDao.queryTopNUserDetail(spark, dt, dn, 3)

    // 按试卷分组统计每份试卷的倒数前三的用户详情
    // 将结果写入 ads.ads_low3_userdeta
    DwdQzDao.queryLowNUserDetail(spark, dt, dn, 3)

    // 统计各试卷各分段的用户id
    // 将结果写入 ads.ads_paper_scoresegment_user
    DwdQzDao.queryPaperSourceSegmentUser(spark, dt, dn)

    // 统计试卷未及格的人数，及格的人数，试卷的及格率 及格分数60
    // 将结果写入 ads_user_paper_detail
    DwdQzDao.queryUserPaperDetail(spark, dt, dn)

    // 统计各题的错误数，正确数，错题率
    // 将结果写入 ads.ads_user_question_detail
    DwdQzDao.queryUserQuestionDetail(spark, dt, dn)
  }
}
